#ifndef TDACANALSEGURO_H_
#define TDACANALSEGURO_H_

/* Este TDA representa un canal seguro cuyo tiempo de propagacion se asume despreciable (para la simulacion, instantaneo) */
/* Salvo en la primitiva de creacion, se asume como PRE para todas las primitivas que el canal seguro esta creado */
/* En todas las primitivas se asume en forma implicita que el primer parametro es una variable del tipo del TDA */

/* Capacidad del canal */
#define MAX_CONTENT_LEN 100

/* Definicion del tipo de dato */
typedef struct {
	char contenido[MAX_CONTENT_LEN+1];
} TDACanalSeguro;

/*
 * Crea el canal seguro
 *
 * Parametros:
 * N/A
 *
 * Valor de retorno:
 * N/A
 *
 * PRE: N/A
 * POST: se ha creado el canal seguro
 *
 */
void crearCanalSeguro(TDACanalSeguro* canalSeguro);

/*
 * Destruye el canal seguro
 *
 * Parametros:
 * N/A
 *
 * Valor de retorno:
 * N/A
 *
 * PRE: N/A
 * POST: el canal seguro se ha destruido
 *
 */
void destruirCanalSeguro(TDACanalSeguro* canalSeguro);

/*
 * Ingresa contenido en el canal, pisando cualquier valor previo
 *
 * Parametros:
 * contenido	un char* que apunta a una cadena de texto con el contenido a ingresar al canal
 *
 * Valor de retorno:
 * 0 si el contenido se ingreso satisfactoriamente
 * 1 si el contenido no pudo ser ingresado al canal
 *
 * PRE: contenido apunta a una cadena de texto valida de no mas de MAX_CONTENT_LEN caracteres
 * POST: el nuevo contenido del canal es el indicado en contenido
 *
 */
int setContenido(TDACanalSeguro* canalSeguro, char* contenido);

/*
 * Obtiene el contenido del canal
 *
 * Parametros:
 * contenido	un char* que apunta a un buffer donde se copiara el contenido del canal
 *
 * Valor de retorno:
 * un numero entero que indica la cantidad de caracteres que tiene el contenido del canal
 *
 * PRE: contenido apunta a una zona de memoria valida con espacio suficiente para contener MAX_CONTENT_LEN caracteres y ademas el caracter terminador de cadena
 * POST: se ha copiado en contenido el contenido del canal (que no es alterado)
 *
 */
int getContenido(TDACanalSeguro canalSeguro, char* contenido);

/*
 * Elimina todo contenido del canal
 *
 * Parametros:
 * N/A
 *
 * Valor de retorno:
 * N/A
 *
 * PRE: N/A
 * POST: el canal ya no tiene contenido alguno
 *
 */
void eliminarContenido(TDACanalSeguro* canalSeguro);

#endif /*TDACANALSEGURO_H_*/
